close all
clear all
clc

format longE

f = inline('a*(x.^2)+2b*x+c', 'x', 'a', 'b', 'c');
er = inline('abs(x_approx-x_real)/abs(x_real)', 'x_approx', 'x_real');

x1_esatta = 1e4;
x2_esatta = 1e-6;

a = 1;
b = -(x2_esatta + x1_esatta);
c = x1_esatta*x2_esatta;

% Calcolo le approssimazioni con le varie formule / algoritmi
x1_algo1 = (-b+sqrt(b^2-4*a*c))/(2*a);
x2_algo1 = (-b-sqrt(b^2-4*a*c))/(2*a);

x1_algo2 = (-b-sign(b)*sqrt(b^2-4*a*c))/(2*a);
x2_algo2 = c/(a*x1_algo2);

sol_algo3 = roots([a b c]);
x1_algo3 = sol_algo3(1);
x2_algo3 = sol_algo3(2);

% Calcolo gli errori relativi
er_x1_algo1 = er(x1_algo1, x1_esatta);
er_x2_algo1 = er(x2_algo1, x2_esatta);
er_x1_algo2 = er(x1_algo2, x1_esatta);
er_x2_algo2 = er(x2_algo2, x2_esatta);
er_x1_algo3 = er(x1_algo3, x1_esatta);
er_x2_algo3 = er(x2_algo3, x2_esatta);

disp('Visualizzo radici trovate');
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'x1_esatta', x1_esatta, 'x2_esatta', x2_esatta);
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'x1_algo1', x1_algo1, 'x2_algo1', x2_algo1);
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'x1_algo2', x1_algo2, 'x2_algo2', x2_algo2);
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'x1_algo3', x1_algo3, 'x2_algo3', x2_algo3);

disp('Visualizzo gli errori relativi');
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'er_x1_algo1', er_x1_algo1, 'er_x2_algo1', er_x2_algo1);
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'er_x1_algo2', er_x1_algo2, 'er_x2_algo2', er_x2_algo2);
fprintf('%10s = %20.15e\t%10s = %20.15e\n', ...
    'er_x1_algo3', er_x1_algo3, 'er_x2_algo3', er_x2_algo3);